The image doesn’t appear when we have a link in the caption
Overview
In this session we cover 3 common tasks when tidying up real datasets:
- Recoding data (e.g. questionnaire responses) from text to numeric values
- Separating ‘untidy’ columns into tidy, long-form data:
- Joining two sources of data (e.g. two spreadsheets) into a single dataframe
Separating variables
Sometimes we need to separate ‘untidy’ variables into tidy, long-form data.
The code below generates simulated data for 100 individuals at three time points. The format is similar to the way you might record experimental data in a spreadsheet.
N <- 100
repeatmeasuresdata <- tibble(person = 1:N,
time_1 = rnorm(N),
time_2 = rnorm(N, 1),
time_3 = rnorm(N, 3))
repeatmeasuresdata %>% head(8)# A tibble: 8 × 4
person time_1 time_2 time_3
<int> <dbl> <dbl> <dbl>
1 1 -0.280 -0.392 2.17
2 2 0.0200 1.36 3.45
3 3 -0.0412 2.50 3.38
4 4 0.505 1.24 4.42
5 5 -2.93 0.462 2.37
6 6 1.15 2.35 0.778
7 7 -1.85 1.24 1.20
8 8 0.808 1.63 1.53
This variable, repeatmeasuresdata, is in
wide format. Each row contains data for one
participant, and each participant has three observations.
As we saw previously, we can pivot — i.e., reshape — the data into longer format like so:
repeatmeasuresdata %>%
pivot_longer(starts_with("time")) %>%
arrange(person, name) %>%
head(8)# A tibble: 8 × 3
person name value
<int> <chr> <dbl>
1 1 time_1 -0.280
2 1 time_2 -0.392
3 1 time_3 2.17
4 2 time_1 0.0200
5 2 time_2 1.36
6 2 time_3 3.45
7 3 time_1 -0.0412
8 3 time_2 2.50
The problem we have now is that name contains text which
describes at which time the observation was made. We probably want to
store a number for each time-point, so we can make a plot with
time on the x axis.
The separate command separates a single character column
(name) into multiple columns. Rather than have a column
with labels of the form ‘time_1’, it can create two columns, with labels
‘time’ and ‘1’ in each.
# convert to long form; extract the `time` as a new numeric column
longrepeatmeasuresdata <- repeatmeasuresdata %>%
pivot_longer(starts_with("time")) %>%
separate(name, into = c("variable", "time"))
longrepeatmeasuresdata %>% head# A tibble: 6 × 4
person variable time value
<int> <chr> <chr> <dbl>
1 1 time 1 -0.280
2 1 time 2 -0.392
3 1 time 3 2.17
4 2 time 1 0.0200
5 2 time 2 1.36
6 2 time 3 3.45
Now the data are in long format, we can plot the points over time:
longrepeatmeasuresdata %>%
sample_n(30) %>%
ggplot(aes(x=time, y=value)) +
geom_point()How does R know where to split the text?
In the example above, separate split data like
"time_1", "time_2" etc into two columns:
variable and time.
Q: How did it know to use the underscore (_) to split
the data?
A: The default is to split on anything which is not a letter or
number. So _ or a space, or , would all
work.
Sometimes though we need to tell R explicitly what to use to sepatate the values.
If we had a column of email addresses we could split
ben.whalley@plymouth.ac.uk into the username
(e.g. ben.whalley) and domain name
(plymouth.ac.uk) using the @ symbol.
To do this we just write sep="@" when we use
separate.
The messy_exp dataset in psydata contains
simulated RT data on 100 participants in 2 conditions (A and B) at three
time points (1, 2, and 3).
- Use the
separate()function to split up theconditionvariable in this dataset and draw the following plot:
messy_exp %>%
separate(condition, into=c("participant", "condition", "time")) %>%
ggplot(aes(time, rt, color=condition)) +
geom_boxplot(width=.5) +
labs(x="Time", y="Reaction time (ms)", color="Condition")- This file contains sample contact and address data for 100 people: https://letterhub.com/wp-content/uploads/2018/03/100-contacts.csv
Read the data into R (you can either use the URL above directly inside the
read_csv()function, or download then re-upload the data to the server to do this)Use the
separatefunction to make a new variable which contains the domain name of these contacts’ email address (e.g. yahoo.com, hotmail.com)
Note, you will need to use
sep="@"to split the email addresses at the@symbol
- Use the
distinctand/orcountfunctions on the new variable you create containing the domain name. Look them up in the help file if you don’t know which to use to answer these questions:
- How many people had a Gmail account?
- Which domains had more than 10 users?
# read the data directly from the URL
contacts <- read_csv('https://letterhub.com/wp-content/uploads/2018/03/100-contacts.csv') %>%
separate(email, into=c("user", "domain"), sep ="@") # uses the @ symbol as a separator# how many _different_ domains are there?
contacts %>%
distinct(domain) %>%
count()# A tibble: 1 × 1
n
<int>
1 39
# how many people use gmail
contacts %>%
count(domain) %>%
filter(domain=="gmail.com")# A tibble: 1 × 2
domain n
<chr> <int>
1 gmail.com 16
# which domains had more than 10 users?
contacts %>%
count(domain) %>%
filter(n > 10) # A tibble: 4 × 2
domain n
<chr> <int>
1 aol.com 13
2 gmail.com 16
3 hotmail.com 13
4 yahoo.com 13
Questionnaire data
Importing from Excel
You should always keep your data in csv format. Don’t use Excel or other proprietary formats to store data unless absolutely necessary.
Unfortunately, some tools (including Office 365 Forms) provide data
in xlsx format, and for this we need to use a special
function in R. You can import this data to RStudio by:
- Uploading the
xlsxfile to the RStudio server, as you have done before - Loading the
riopackage - Using the
import()function in that package, instead ofread_csv()
The example data linked below were exported from an Office 365 Form, so they are in a similar format to that which you might expect using other online survey tools.
- Download 'sweets' example in xslx format
(
sweets.xlsx)
We can look at the first few rows of the data, using the
head command:
sweets %>% head() ID Start time Completion time Email Name
1 6 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA
2 7 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA
3 8 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA
4 9 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA
How much do you like sweets? How much do you like chocolate Gender
1 I don't like them I don't like them M
2 I'm neutral I don't like them F
3 I like them I'm neutral M
4 I'm neutral I'm neutral F
Import the sweets data into RStudio, as shown above
Save it to a new variable called
sweets
Tidying questionnaires
When we look at the imported data it’s useful to note:
There are extra columns we don’t need (at least for now).
Some of our variable names are very long and annoying to type (for example
How much do you like sweets?is the name of one of our columns).Our responses are in text format, rather than as numbers. For example, the data say
"I don't like them"or"I'm neutral"rather than numbers from a 1-5 scale.We may have other data on the same participants that are stored in separate files.
We need to sort each of these problems to make things more manageable for our analysis.
Selecting and renaming
Remember, R makes using columns with spaces or other special characters very hard. We want to avoid this.
Selecting
To use columns with spaces in we must ‘escape’ the spaces and let R know they are part of the name rather than a gap between two different names.
This video shows how (or read below):
To escape spaces and use columns with long names we use the backtick character (the backwards facing apostrophe) to wrap the column name.
In general, if your columns contain spaces or other odd characters like hyphens or question marks then you will need to wrap them in backticks.
Renaming
Some of the imported variable names in the sweets data
are long and awkward to use.
Most researchers would rename these variables, to make them more usable in R code.
You can rename variables like this:
datasetname %>%
rename(NEW_COLUMN_NAME = OLD_COLUMN_NAME)So for this example:
sweets %>%
rename(
like_sweets = `How much do you like sweets?`,
like_chocolate = `How much do you like chocolate`,
) ID Start time Completion time Email Name like_sweets
1 6 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA I don't like them
2 7 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA I'm neutral
3 8 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA I like them
4 9 2019-05-24 09:12:31 2019-05-24 09:12:35 anonymous NA I'm neutral
like_chocolate Gender
1 I don't like them M
2 I don't like them F
3 I'm neutral M
4 I'm neutral F
Explanation of the code: We used rename
to change the names of our variables. We needed to wrap the long names
of the questions in ‘backtick’ symbols to make sure R understood it was
a single column name.
You should create a new variable to save the renamed dataset (with a descriptive name for use later on):
# create a new variable containing the renamed dataset
sweets.renamed <- sweets %>%
rename(
like_sweets = `How much do you like sweets?`,
like_chocolate = `How much do you like chocolate`,
)Create a copy of the sweets data in which you have selected only the two columns with long names.
Create a second copy of the data where you have renamed the columns with long names to something short, and without spaces.
Renaming with the janitor package
A good alternative to renaming variables manually is to use the
clean_names function in the janitor
package.
sweets %>%
janitor::clean_names() %>%
glimpseRows: 4
Columns: 8
$ id <dbl> 6, 7, 8, 9
$ start_time <dttm> 2019-05-24 09:12:31, 2019-05-24 09:12:3…
$ completion_time <dttm> 2019-05-24 09:12:35, 2019-05-24 09:12:…
$ email <chr> "anonymous", "anonymous", "anonymous",…
$ name <lgl> NA, NA, NA, NA
$ how_much_do_you_like_sweets <chr> "I don't like them", "I'm neutral", "I …
$ how_much_do_you_like_chocolate <chr> "I don't like them", "I don't like them…
$ gender <chr> "M", "F", "M", "F"
Explanation of the code and result. I used the
clean_names function within the janitor
package without using library. I did this by typing
janitor:: and then the name of the function. In the result
clean_names has made a new dataset:
- Removed all special characters
- Made everything lower case (easier for R to autocomplete)
- Replaced spaces with underscores
- Made column names unique (this isn’t always the case with imported data, but is important for R)
I typically use this function when importing any new data because it makes the naming and access of columns much more consistent and easier to remember.
Repeat the previous exercise, but this time use
clean_names.
Recoding text
We noticed above that our responses were stored as text labels like
"I don't like them" rather than on a numeric scale. This
makes it hard to use in an analysis.
We need to recode the text variables into numeric versions.
How to do it
First we must tell R what number we want to use for each text label. That is, we create a mapping of numbers to labels.
This takes a few steps:
- Check exactly what the text values are which need to be mapped.
- Make a mapping variable which assigns each text value a number value
- Use the
recodefunction withmutateto create a new, numeric column
This video walks you through the steps below:
Step 1: Check EXACTLY what text labels we have
To check which labels we need to recode, I select the column in
question and use the unique() function.
# check exactly what text values are in the dataset?
sweets %>%
select(`How much do you like sweets?`) %>%
unique() How much do you like sweets?
1 I don't like them
2 I'm neutral
3 I like them
Do the same to find out the possible values of the
How much do you like chocolate column.
sweets %>%
select(`How much do you like chocolate`) %>%
distinct() How much do you like chocolate
1 I don't like them
2 I'm neutral
Step 2: Make a mapping variable
We do this by creating what R calles a named vector, which is a special kind of list.
To make a named vector we use the the c() function. The
letter c here just stands for ‘combine’ — i.e. ‘combine
these things into a list’.
This is a simple example:
mapping.list <- c("No" = 0, "Yes" = 1)We could then use this mapping to recode a column of data which contained the words “No” or “Yes
A useful trick when creating your own mappings is to use R to do the formatting for you (see the video above for a demo).
Re-using the code from the previous step, we use
unique() to show us the unique values for the
quuestion about sweets.
We then pipe the result to the paste() and
cat() functions, like this:
# the hack we use as a short-cut to creating a mapping variable
sweets %>%
select(`How much do you like sweets?`) %>%
unique() %>%
paste() %>% cat()c("I don't like them", "I'm neutral", "I like them")
Explanation of the output: Using paste
and cat is a bit of a hack. When we run this code we see
the output
c("I don't like them", "I'm neutral", "I like them"). This
is a list of the values in the sweets data for this
question, formatted in a way that will be useful to us in the next
step.
We then copy and paste this output into a NEW code block, and edit it to assign our mappings:
preference.mappings <- c("I don't like them" = -1, "I'm neutral" = 0, "I like them" = 1)Explanation of the code: We used the previous output
to create a mapping. By adding the = -1 and
= 0 etc, we have told R what value we want to assign for
each label.
Q: How do you know what number values to assign?
A: It doesn’t matter, provided:
- The intervals between each options are the same and
- Each text value has a different number
So, if we had a Likert-scale ranging from “Completely agree” to
“Completely disagree” in 7 increments, we could score this from
0 - 6 or 1 - 7, or -3 - 3. These
would all be fine.
Step 3: Use the mapping variable to recode the column
We can use our new mapping with the mutate and
recode functions to make a new column,
containing numbers rather than text:
sweets.recoded <- sweets %>%
# use recode to convert text response using preference.mappings
mutate(
like_sweets_numeric =
recode(`How much do you like sweets?`, !!!preference.mappings)
)We can see this new column if we use glimpse:
sweets.recoded %>% glimpse()Rows: 4
Columns: 9
$ ID <dbl> 6, 7, 8, 9
$ `Start time` <dttm> 2019-05-24 09:12:31, 2019-05-24 09:12…
$ `Completion time` <dttm> 2019-05-24 09:12:35, 2019-05-24 09:1…
$ Email <chr> "anonymous", "anonymous", "anonymous…
$ Name <lgl> NA, NA, NA, NA
$ `How much do you like sweets?` <chr> "I don't like them", "I'm neutral", "…
$ `How much do you like chocolate` <chr> "I don't like them", "I don't like th…
$ Gender <chr> "M", "F", "M", "F"
$ like_sweets_numeric <dbl> -1, 0, 1, 0
Explanation of the code: - The start of the first
line is sweets.recoded <- which means make a new
variable called sweets.recoded. - Then we use
mutate to create a new column called
like_sweets_numeric. - We make this column using
recode on the question about liking sweets. - We use the
preference.mappings mapping to specify what numeric score
to give each of the text values.
Watch out for the exclamations
marks!!!: In the code there are three exclamation marks,
!!!, before the mapping; make sure you do the same.
Summary/video explanation
This is one of the trickiest bits of R code we use. I’ve included an annotated video of just these steps as a reference below:
Use this three-step process to create a recoded version of the
like_chocolatevariable.Remember to watch the video at the start of this section, or the short version in the green box above, if anything is unclear.
Reverse codings
Watch out for “reverse coded” items. Imagine a questionnaire that includes two items:
- “I really love sweets”
- “I really hate sweets”
Participants respond on a scale of “Agree”, “Disagree”, and “Neutral”.
Using the same mapping to both these questions would not be appropriate. Instead, we should use two separate mappings for the different questions to ensure the direction of the coding has the same meaning:
# mapping for items like "I really love sweets"
agree.disagree.responses <- c(
"Agree" = 3,
"Neutral" = 2,
"Disagree" = 1)# reversed mapping for items like "I really hate sweets"
agree.disagree.responses.REVERSED <- c(
"Agree" = 1,
"Neutral" = 2,
"Disagree" = 3)Coded in this way, scores for the questions could be added or averaged to provide a summary score.
Multiple new columns
You can create multiple new columns at once using mutate, to recode each of our variables:
sweets.recoded <- sweets.renamed %>%
# create two columns at once using mutate
mutate(
like_sweets_numeric = recode(like_sweets, !!!preference.mappings),
like_chocolate_numeric = recode(like_chocolate, !!!preference.mappings)
)Explanation of the code: We combined the two
examples above to create 3 new columns with recoded (numeric) values. We
saved this to the variable called sweets.recoded.
Combining scores
Often questionnaires are designed to make repeated measurements of the same phenomena, which can then be summed or averaged to create a more reliable measure.
We’ve already seen how mutate() creates a new column. We
can use this again to create the sum of responses to both
questions:
sweets.recoded %>%
# mutate to create column containing sum of both recoded questions
mutate(liking = like_sweets_numeric + like_chocolate_numeric) %>%
select(starts_with('like')) like_sweets like_chocolate like_sweets_numeric
1 I don't like them I don't like them -1
2 I'm neutral I don't like them 0
3 I like them I'm neutral 1
4 I'm neutral I'm neutral 0
like_chocolate_numeric
1 -1
2 -1
3 0
4 0
Explanation of the code:
- We added both the questions which asked about ‘liking’ together.
This created a new column containing the combined score, called
liking. - In the third line we selected only columns with names that started with the word ‘like’, to make the output easier to view.
Consolidation activity
Use this example dataset: sleep.xlsx
- Download the sleep.xlsx file, and upload it to the RStudio server. Make sure you upload it to the same directory as the Rmd file you are working in.
- Read in the data using the
importfunction in theriopackage - Rename the long column names to something short, and without spaces
- Recode at least three of the columns with data about sleep quality to be numeric
- Save the result of this work in a new variable called
sleep.tidy - Pivot the recoded variables and make a boxplot of responses to these questions
- Create a summary score called
sleep_qualitywhich is the sum of these recoded questions (use mutate) - Create a density plot of this summary score and interpret what you see (describe the pattern in plain English)
# this block assumes you have already uploaded the data to the server
library(rio)
sleep <- import('sleep.xlsx')# used to check what response values are in each question
sleep %>%
select(`My sleep is affected by my study commitments`) %>%
unique() %>% paste %>% catc("Agree", "Somewhat agree", "Somewhat disagree", "Disagree", "Neither agree nor disagree", "Strongly agree", "Strongly disagree")
sleep %>%
select(`My electronic device usage negatively affects my sleep`) %>%
unique() %>% paste %>% catc("Disagree", "Strongly agree", "Somewhat disagree", "Agree", "Somewhat agree", "Neither agree nor disagree", "Strongly disagree")
# we will use the same mapping for both questions because they have the same responses
sleep.map <- c("Agree"=2,
"Somewhat agree"=1,
"Somewhat disagree"=-1,
"Disagree"=-2,
"Neither agree nor disagree"=0,
"Strongly agree"=3,
"Strongly disagree"=-3)
sleep.tidy <- sleep %>%
# now we recode the two text variables (we only need use mutate once though)
mutate(
sleep_study = recode(`My sleep is affected by my study commitments`, !!!sleep.map),
sleep_electronic = recode(`My electronic device usage negatively affects my sleep`, !!!sleep.map)
)# now we can pivot longer to make a plot
sleep.tidy %>%
pivot_longer(c(sleep_study, sleep_electronic)) %>%
ggplot(aes(name, value)) + geom_boxplot()And make a summary score combining both questions
sleep.tidy.withsumary <- sleep.tidy %>%
# and create the summary score
mutate(sleep_quality = sleep_study + sleep_electronic )
# check the result. it looks ok
sleep.tidy.withsumary %>% glimpseRows: 241
Columns: 13
$ uniqueid <chr> …
$ `Start time` <dttm> …
$ `Completion time` <dttm> …
$ `My sleep is affected by my study commitments` <chr> …
$ `I achieve good quality sleep` <chr> …
$ `My electronic device usage negatively affects my sleep` <chr> …
$ `Tiredness interferes with my concentration` <chr> …
$ `My sleep is disturbed by external factors e.g. loud cars, housemates, lights, children...` <chr> …
$ `I often achieve eight hours of sleep` <chr> …
$ `I regularly stay up past 11pm` <chr> …
$ sleep_study <dbl> …
$ sleep_electronic <dbl> …
$ sleep_quality <dbl> …
# finally, make the requested density plot
# make the density plot
sleep.tidy.withsumary %>%
ggplot(aes(sleep_quality)) +
geom_density()Joining data
This is an optional extension section. It’s not needed for the assessment, but will be useful for those conducting studies using on-screen experiment software like OpenSesame.
Often we will have data from two different sources which must be combined. This section explains how to do that.
Imagine we have two datasets like this, one containing identifying information:
| Identifier | Name |
|---|---|
| 123ABC | Ben |
| 456DEF | Helen |
| 678FGH | Esther |
And a second dataset containing sensitive questionnaire data:
| Identifier | Worst ever record purchase |
|---|---|
| 123ABC | Europe, the final countdown |
| 456DEF | Spice Girls Wannabe |
| 678FGH | One Direction - Night changes |
Note that the
Identifiercolumn is common to both datasets.
We can use a new tidyverse function which joins these
two datasets into a combined table:
left_join(personal_data, research_data, by="Identifier")# A tibble: 3 × 3
Identifier Name `Worst ever record purchase`
<chr> <chr> <chr>
1 123ABC Ben Europe, the final countdown
2 456DEF Helen Spice Girls Wannabe
3 678FGH Esther One Direction - Night changes
Explanation of left_join
The left_join function takes two dataframes as input. We
call the first input the ‘left hand side’, and the second input the
‘right hand side’.
Both left and right sides have to share at least one
column. In this case it’s called Identifier.
When the left and right hand side match then left_join
copies the extra columns from the right hand side into the left hand
side.
It returns a combined dataframe.
Any extra rows in the right hand side which don’t match the left hand
side are dropped. This might happen if we have research data for people
we don’t have personal data for. There are other
functions like full_join which do this a bit
differently, but we don’t need them for now.
Have a look at the
heroes_metaandheroes_personaldatasets, inpsydata.Adapt the code for
left_join()shown above to combine these datasets.Pipe the result of
left_join()tocount()to check how many rows are in the final datasetDoes it matter which order you join the datasets in? Can you explain the number of rows in the resulting dataset?
Save the combined dataset into a new csv file using
write_csv(). Check you can find this in the RStudio files pane, and download a copy to be sure.
Do the join:
left_join(heroes_meta, heroes_personal) name publisher gender eye_color
1 Giganta DC Comics Female green
2 Black Goliath Marvel Comics <NA> <NA>
3 Spider-Man Marvel Comics - red
4 Spider-Man Marvel Comics Male brown
5 Spider-Man Marvel Comics Male hazel
6 Superboy-Prime DC Comics Male blue
7 Lady Bullseye Marvel Comics Female -
8 Black Canary DC Comics Female blue
9 Black Canary DC Comics Female blue
10 Black Lightning DC Comics Male brown
11 X-23 Marvel Comics Female green
12 Silverclaw Marvel Comics Female brown
13 Hiro Nakamura NBC - Heroes Male -
14 Beta Ray Bill Marvel Comics <NA> <NA>
15 Franklin Storm Marvel Comics - blue
16 Katniss Everdeen Female -
17 Colossal Boy DC Comics Male -
18 Sage Marvel Comics Female blue
19 Abomination Marvel Comics Male green
20 Thing Marvel Comics <NA> <NA>
21 Red Robin DC Comics Male blue
22 Deadman DC Comics <NA> <NA>
23 Cyborg Superman DC Comics Male blue
24 Paul Blart Sony Pictures <NA> <NA>
25 Multiple Man Marvel Comics Male blue
26 Siren DC Comics Female blue
27 Stardust Marvel Comics Male -
28 Savage Dragon Image Comics Male -
29 Parademon DC Comics - -
30 Valkyrie Marvel Comics Female blue
31 Magneto Marvel Comics Male grey
32 Kang Marvel Comics Male brown
33 Black Widow II Marvel Comics Female blue
34 Boomer Marvel Comics Female -
35 Ink Marvel Comics Male blue
36 Arclight Marvel Comics Female violet
37 Spider-Woman II Marvel Comics Female -
38 Green Arrow DC Comics Male green
39 Firelord Marvel Comics - white
40 Spider-Woman IV Marvel Comics Female red
41 Wondra Marvel Comics Female -
42 Cogliostro Image Comics Male -
43 Guy Gardner DC Comics Male blue
44 Jennifer Kale Marvel Comics <NA> <NA>
45 Han Solo George Lucas Male brown
46 Vibe DC Comics Male brown
47 Doc Samson Marvel Comics Male blue
48 Riddler DC Comics Male -
49 Hawkeye Marvel Comics Male blue
50 Brainiac DC Comics Male green
51 Cable Marvel Comics Male blue
52 Blue Beetle DC Comics Male -
53 Drax the Destroyer Marvel Comics Male red
54 Skaar Marvel Comics Male green
55 Nite Owl II DC Comics Male -
56 Purple Man Marvel Comics Male purple
57 Greedo George Lucas Male purple
58 Darth Vader George Lucas Male yellow
59 Vulture Marvel Comics Male brown
60 Rocket Raccoon Marvel Comics Male brown
61 Plastic Man DC Comics Male blue
62 Evilhawk Marvel Comics Male red
63 JJ Powell ABC Studios Male -
64 Thunderbird II Marvel Comics Male -
65 Sunspot Marvel Comics Male brown
66 Shriek Marvel Comics Female yellow / blue
67 Marvel Girl Marvel Comics Female green
68 Destroyer Marvel Comics Male -
69 Overtkill Image Comics Male -
70 Garbage Man DC Comics Male -
71 Chamber Marvel Comics Male brown
72 Batman II DC Comics Male blue
73 Sabretooth Marvel Comics Male amber
74 Wyatt Wingfoot Marvel Comics Male brown
75 Namorita Marvel Comics Female blue
76 Mister Mxyzptlk DC Comics Male -
77 Bane DC Comics Male -
78 Metron DC Comics <NA> <NA>
79 Red Arrow DC Comics Male green
80 Allan Quatermain Wildstorm Male -
81 Swarm Marvel Comics Male yellow
82 Steel DC Comics Male brown
83 Hawkwoman III DC Comics Female blue
84 Blizzard Marvel Comics Male -
85 Blizzard Marvel Comics Male -
86 Warlock Marvel Comics Male red
87 Black Knight III Marvel Comics <NA> <NA>
88 Deadshot DC Comics Male brown
89 King Kong Male yellow
90 Sif Marvel Comics Female blue
91 Tempest Marvel Comics Female brown
92 Captain Planet Marvel Comics Male red
93 Beetle Marvel Comics Male -
94 Professor X Marvel Comics Male blue
95 Blue Beetle III DC Comics Male brown
96 Fixer Marvel Comics - red
97 Medusa Marvel Comics Female green
98 Clock King DC Comics Male blue
99 Cat Marvel Comics Female blue
100 Morph Marvel Comics Male white
101 Donatello IDW Publishing Male green
102 T-1000 Dark Horse Comics Male -
103 Flash II DC Comics <NA> <NA>
104 Man of Miracles Image Comics - blue
105 Thanos Marvel Comics Male red
106 Exodus Marvel Comics Male blue
107 Ultragirl Marvel Comics <NA> <NA>
108 Archangel Marvel Comics Male blue
109 Ra's Al Ghul DC Comics Male green
110 Nova Marvel Comics Male brown
111 Yellowjacket II Marvel Comics Female blue
112 Micah Sanders NBC - Heroes Male brown
113 Silk Spectre II DC Comics Female -
114 Jigsaw Marvel Comics Male blue
115 Ms Marvel II Marvel Comics Female blue
116 Leech Marvel Comics Male -
117 Junkpile Marvel Comics Male -
118 Husk Marvel Comics <NA> <NA>
119 Silk Marvel Comics Female brown
120 Bumblebee DC Comics Female brown
121 Mephisto Marvel Comics Male white
122 Yoda George Lucas Male brown
123 Thunderbird III Marvel Comics <NA> <NA>
124 Mister Fantastic Marvel Comics Male brown
125 Cottonmouth Marvel Comics Male brown
126 Mantis Marvel Comics Female green
127 Nebula Marvel Comics Female blue
128 Question DC Comics Male blue
129 Stacy X Marvel Comics Female -
130 Deathlok Marvel Comics Male brown
131 Quill Marvel Comics Male brown
132 Songbird Marvel Comics Female green
133 Gravity Marvel Comics Male blue
134 Hobgoblin Marvel Comics Male blue
135 Cameron Hicks SyFy Male -
136 Bill Harken SyFy Male -
137 Big Man Marvel Comics Male blue
138 Fabian Cortez Marvel Comics - blue
139 Ymir Marvel Comics <NA> <NA>
140 Ghost Rider II Marvel Comics - -
141 Mandarin Marvel Comics Male blue
142 Ant-Man Marvel Comics Male blue
143 Agent Bob Marvel Comics Male brown
144 Snowbird Marvel Comics Female white
145 Maya Herrera NBC - Heroes Female -
146 Venom Marvel Comics Male blue
147 Iron Fist Marvel Comics Male blue
148 Sebastian Shaw Marvel Comics Male -
149 Air-Walker Marvel Comics <NA> <NA>
150 Goliath IV Marvel Comics <NA> <NA>
151 Groot Marvel Comics Male yellow
152 Hyperion Marvel Comics Male blue
153 Jack of Hearts Marvel Comics Male blue / white
154 Sinestro DC Comics Male black
155 Black Widow Marvel Comics Female green
156 Rambo Male brown
157 Phantom Girl DC Comics Female blue
158 Wolfsbane Marvel Comics Female green
159 Ares Marvel Comics Male brown
160 Crimson Crusader Marvel Comics Male blue
161 Changeling Marvel Comics Male brown
162 Arachne Marvel Comics Female blue
163 Deathstroke DC Comics Male blue
164 Goliath Marvel Comics Male -
165 Goliath Marvel Comics Male -
166 Goliath Marvel Comics Male -
167 Azrael DC Comics Male brown
168 Kraven II Marvel Comics Male brown
169 Wonder Girl DC Comics Female blue
170 Miss Martian DC Comics Female red
171 Ando Masahashi NBC - Heroes Male -
172 Chameleon DC Comics Male -
173 Batgirl DC Comics Female green
174 Trigon DC Comics Male yellow
175 Luke Cage Marvel Comics Male brown
176 Batman DC Comics Male blue
177 Batman DC Comics Male blue
178 Aztar DC Comics Male -
179 Namora Marvel Comics Female blue
180 Darkman Universal Studios Male -
181 Domino Marvel Comics Female blue
182 Energy HarperCollins Female -
183 Lizard Marvel Comics Male red
184 Rachel Pirzad SyFy Female -
185 Mr Immortal Marvel Comics Male blue
186 Trickster DC Comics Male blue
187 Leonardo IDW Publishing Male blue
188 Krypto DC Comics Male blue
189 Omega Red Marvel Comics Male red
190 Man-Thing Marvel Comics Male red
191 Darkside - -
192 Moses Magnum Marvel Comics Male brown
193 Black Mamba Marvel Comics Female green
194 Data Star Trek Male yellow
195 Moon Knight Marvel Comics Male brown
196 Batgirl IV DC Comics Female green
197 Bird-Brain Marvel Comics - -
198 Vertigo II Marvel Comics Female blue
199 Harley Quinn DC Comics Female blue
200 Speedy DC Comics Male -
201 Gorilla Grodd DC Comics Male yellow
202 Lyja Marvel Comics Female green
203 Superman DC Comics Male blue
204 Man-Wolf Marvel Comics Male brown
205 Penance Marvel Comics - -
206 Jessica Jones Marvel Comics Female brown
207 T-850 Dark Horse Comics Male red
208 Mysterio Marvel Comics Male brown
209 Alex Mercer Wildstorm <NA> <NA>
210 Naruto Uzumaki Shueisha Male -
211 Feral Marvel Comics - yellow (without irises)
212 Nightcrawler Marvel Comics Male yellow
213 Silk Spectre DC Comics <NA> <NA>
214 Claire Bennet NBC - Heroes Female blue
215 Man-Bat DC Comics Male brown
216 Scorpion Marvel Comics Male brown
217 Cyborg DC Comics Male brown
218 Toxin Marvel Comics Male blue
219 K-2SO George Lucas Male white
220 Utgard-Loki Marvel Comics Male blue
221 Captain Mar-vell Marvel Comics <NA> <NA>
222 Cecilia Reyes Marvel Comics - brown
223 Darth Maul George Lucas Male yellow / red
224 Molten Man Marvel Comics Male gold
225 Black Manta DC Comics Male black
226 Namor Marvel Comics Male -
227 Namor Marvel Comics Male grey
228 Ghost Rider Marvel Comics Male red
229 Maxima DC Comics Female brown
230 Kilowog DC Comics Male red
231 Odin Marvel Comics Male blue
232 Weapon XI Marvel Comics Male -
233 Falcon Marvel Comics Male brown
234 Doppelganger Marvel Comics Male white
235 Atom Girl DC Comics Female black
236 Spock Star Trek Male brown
237 Zatanna DC Comics Female blue
238 Mockingbird Marvel Comics Female blue
239 White Canary DC Comics Female brown
240 Black Flash DC Comics Male -
241 Light Lass DC Comics Female blue
242 Space Ghost DC Comics Male -
243 Bullseye Marvel Comics <NA> <NA>
244 Liz Sherman Dark Horse Comics Female -
245 Violet Parr Dark Horse Comics Female violet
246 War Machine Marvel Comics Male brown
247 Nick Fury Marvel Comics Male brown
248 Violator Image Comics Male -
249 Aquababy DC Comics Male blue
250 Bling! Marvel Comics Female -
251 Thundra Marvel Comics Female green
252 Jessica Sanders NBC - Heroes Female -
253 Kid Flash II DC Comics Male -
254 Galactus Marvel Comics Male black
255 Cyclops Marvel Comics Male brown
256 Binary Marvel Comics Female blue
257 Brother Voodoo Marvel Comics Male brown
258 Invisible Woman Marvel Comics Female blue
259 Dazzler Marvel Comics Female blue
260 Mister Sinister Marvel Comics Male red
261 Sobek DC Comics Male white
262 Thunderstrike Marvel Comics Male blue
263 Namor Marvel Comics Male -
264 Namor Marvel Comics Male grey
265 Plastic Lad DC Comics <NA> <NA>
266 Snake-Eyes Marvel Comics Male -
267 Vindicator Marvel Comics Female green
268 Vindicator Marvel Comics Male -
269 Swamp Thing DC Comics Male red
270 Meltdown Marvel Comics <NA> <NA>
271 Iceman Marvel Comics Male brown
272 Bloodwraith Marvel Comics Male white
273 Darkhawk Marvel Comics Male brown
274 Red Mist Icon Comics Male -
275 Robin III DC Comics Male blue
276 Thunderbird Marvel Comics Male brown
277 Red Skull Marvel Comics Male blue
278 Indigo DC Comics Female -
279 Black Cat Marvel Comics Female green
280 Jolt Marvel Comics Female blue
281 Karate Kid DC Comics Male brown
282 Black Canary DC Comics Female blue
283 Black Canary DC Comics Female blue
284 Atlas DC Comics Male brown
285 Atlas DC Comics Male blue
286 Enchantress DC Comics Female blue
287 Chromos Team Epic TV <NA> <NA>
288 Shadow Lass DC Comics Female black
289 Firestorm DC Comics Male brown
290 Firestorm DC Comics Male blue
291 Scarlet Witch Marvel Comics Female blue
292 Rey George Lucas Female hazel
293 Cheetah III DC Comics Female brown
294 T-800 Dark Horse Comics Male red
295 Ardina Marvel Comics Female white
296 Siryn Marvel Comics Female blue
297 Colin Wagner HarperCollins Male grey
298 Iron Monger Marvel Comics Male blue
299 Juggernaut Marvel Comics Male blue
300 Beak Marvel Comics <NA> <NA>
301 Negasonic Teenage Warhead Marvel Comics Female black
302 Ronin Marvel Comics Male blue
303 Synch Marvel Comics Male brown
304 Blizzard II Marvel Comics Male brown
305 Frenzy Marvel Comics Female brown
306 Sauron J. R. R. Tolkien Male -
307 Scorpia Marvel Comics Female green
308 Jean-Luc Picard Star Trek Male -
309 Fallen One II Marvel Comics Male black
310 One-Above-All Marvel Comics - -
311 Shocker Marvel Comics Male brown
312 Plantman Marvel Comics Male green
313 Red Tornado DC Comics <NA> <NA>
314 Banshee Marvel Comics <NA> <NA>
315 Atom III DC Comics Male -
316 Hancock Sony Pictures Male brown
317 Watcher Marvel Comics Male -
318 Elongated Man DC Comics Male blue
319 Clea Marvel Comics <NA> <NA>
320 Joker DC Comics Male green
321 Frigga Marvel Comics Female blue
322 Beast Boy DC Comics Male green
323 Bionic Woman Female blue
324 Doctor Fate DC Comics Male blue
325 Spider-Girl Marvel Comics Female blue
326 Cat II Marvel Comics Female -
327 Ajax Marvel Comics <NA> <NA>
328 Blue Beetle II DC Comics Male blue
329 Alan Scott DC Comics Male blue
330 Vixen DC Comics Female amber
331 Shatterstar Marvel Comics Male brown
332 Batgirl DC Comics Female green
333 Anti-Spawn Image Comics Male -
334 Mister Freeze DC Comics Male -
335 Lightning Lad DC Comics Male blue
336 Huntress DC Comics Female blue
337 Black Adam DC Comics Male brown
338 Shrinking Violet DC Comics Female -
339 Justice Marvel Comics <NA> <NA>
340 Franklin Richards Marvel Comics Male blue
341 Human Torch Marvel Comics Male blue
342 Diamondback Marvel Comics <NA> <NA>
343 Vagabond Marvel Comics Female blue
344 Rick Flag DC Comics Male blue
345 Kylo Ren George Lucas <NA> <NA>
346 Atom II DC Comics Male brown
347 John Constantine DC Comics Male blue
348 Spider-Man Marvel Comics - red
349 Spider-Man Marvel Comics Male brown
350 Spider-Man Marvel Comics Male hazel
351 Lex Luthor DC Comics Male green
352 Martian Manhunter DC Comics Male red
353 Valerie Hart Team Epic TV Female hazel
354 Citizen Steel DC Comics Male green
355 Kevin 11 DC Comics <NA> <NA>
356 Wonder Woman DC Comics Female blue
357 Metallo DC Comics Male green
358 T-X Dark Horse Comics Female -
359 Gambit Marvel Comics Male red
360 Fin Fang Foom Marvel Comics Male red
361 Mera DC Comics Female blue
362 Cerebra Marvel Comics Female -
363 Offspring DC Comics Male -
364 Nightwing DC Comics <NA> <NA>
365 Living Tribunal Marvel Comics - blue
366 Crystal Marvel Comics Female green
367 Howard the Duck Marvel Comics Male brown
368 Firestar Marvel Comics Female green
369 Vindicator Marvel Comics Female green
370 Vindicator Marvel Comics Male -
371 Ant-Man II Marvel Comics Male blue
372 Meteorite Marvel Comics Female -
373 Robin V DC Comics Male blue
374 Alien Dark Horse Comics <NA> <NA>
375 Captain Hindsight South Park Male -
376 Batgirl V DC Comics Female -
377 Lobo DC Comics Male red
378 Lady Deathstrike Marvel Comics Female brown
379 Gary Bell SyFy <NA> <NA>
380 Kathryn Janeway Star Trek Female -
381 Anti-Venom Marvel Comics Male blue
382 Bumbleboy Marvel Comics <NA> <NA>
383 Atom DC Comics Male -
384 Atom DC Comics Male blue
385 Match DC Comics Male black
386 Master Chief Microsoft Male brown
387 Phantom DC Comics Male -
388 Wasp Marvel Comics Female blue
389 Captain Cold DC Comics Male brown
390 Black Abbott Marvel Comics Male red
391 Vision II Marvel Comics - red
392 Sentry Marvel Comics Male blue
393 Boba Fett George Lucas Male brown
394 Hulk Marvel Comics Male green
395 Hellcat Marvel Comics Female blue
396 Kraven the Hunter Marvel Comics Male brown
397 MODOK Marvel Comics Male white
398 Apocalypse Marvel Comics Male red
399 Wildfire DC Comics Male -
400 Micro Lad DC Comics Male grey
401 Yellow Claw Marvel Comics Male blue
402 Batgirl VI DC Comics Female blue
403 Killer Croc DC Comics Male red
404 Triton Marvel Comics Male green
405 Mister Zsasz DC Comics Male blue
406 Agent Zero Marvel Comics Male -
407 Captain America Marvel Comics Male blue
408 Mr Incredible Dark Horse Comics Male blue
409 The Cape Male -
410 Danny Cooper HarperCollins Male brown
411 Polaris Marvel Comics Female green
412 Harry Potter J. K. Rowling Male green
413 Jim Powell ABC Studios Male -
414 Tigra Marvel Comics Female green
415 Poison Ivy DC Comics Female green
416 Granny Goodness DC Comics Female blue
417 Starfire DC Comics Female green
418 Jubilee Marvel Comics Female red
419 Ego Marvel Comics - -
420 Morlun Marvel Comics Male white / red
421 Spider-Woman Marvel Comics Female green
422 Captain Marvel DC Comics Male blue
423 Captain Marvel DC Comics Female blue
424 Vegeta Shueisha Male -
425 Bloodaxe Marvel Comics Female blue
426 Sylar NBC - Heroes Male -
427 Moloch DC Comics Male -
428 Rorschach DC Comics Male blue
429 Catwoman DC Comics Female green
430 Dagger Marvel Comics Female blue
431 Static DC Comics Male brown
432 Redeemer III Image Comics Male -
433 Spider-Woman III Marvel Comics Female brown
434 Black Panther Marvel Comics Male brown
435 Gladiator Marvel Comics Male blue
436 Angel Marvel Comics Male -
437 Angel Marvel Comics Male blue
438 Heat Wave DC Comics Male blue
439 A-Bomb Marvel Comics <NA> <NA>
440 Onslaught Marvel Comics Male red
441 Emma Frost Marvel Comics Female blue
442 Atom DC Comics Male -
443 Atom DC Comics Male blue
444 Fighting Spirit DC Comics Female -
445 Penance II Marvel Comics Male blue
446 Armor Marvel Comics Female black
447 Bloodhawk Marvel Comics <NA> <NA>
448 Q Star Trek Male -
449 Daredevil Marvel Comics Male blue
450 Jesse Quick DC Comics <NA> <NA>
451 Longshot Marvel Comics <NA> <NA>
452 Doctor Doom II Marvel Comics Male brown
453 Callisto Marvel Comics Female blue
454 Angel Dust Marvel Comics Female yellow
455 James Bond Titan Books <NA> <NA>
456 Captain Atom DC Comics Male blue
457 Minna Murray Wildstorm Female -
458 Superboy DC Comics Male blue
459 King Shark DC Comics <NA> <NA>
460 Abe Sapien Dark Horse Comics <NA> <NA>
461 Captain Universe Marvel Comics - -
462 Beast Marvel Comics Male blue
463 Wolverine Marvel Comics Male blue
464 Copycat Marvel Comics Female red
465 Box IV Marvel Comics - brown
466 Hawkwoman DC Comics Female green
467 Northstar Marvel Comics Male blue
468 Rip Hunter DC Comics Male blue
469 Quicksilver Marvel Comics Male blue
470 General Zod DC Comics Male black
471 Warbird Marvel Comics Female blue
472 Flash DC Comics Male blue
473 Sandman Marvel Comics Male brown
474 Darkstar Marvel Comics Female brown
475 Curse Image Comics Male -
476 Goliath Marvel Comics Male -
477 Goliath Marvel Comics Male -
478 Goliath Marvel Comics Male -
479 Supergirl DC Comics Female blue
480 Spectre DC Comics Male white
481 Electro Marvel Comics <NA> <NA>
482 Luna Marvel Comics Female -
483 Wiz Kid Marvel Comics - brown
484 John Wraith Marvel Comics Male brown
485 Guardian Marvel Comics Male brown
486 Captain Marvel Marvel Comics Male blue
487 Captain Marvel Marvel Comics Female blue
488 Kick-Ass Icon Comics Male blue
489 Osiris DC Comics Male brown
490 Gog DC Comics Male -
491 Raven DC Comics Female indigo
492 Blaquesmith Marvel Comics - black
493 Killer Frost DC Comics Female blue
494 Carnage Marvel Comics Male green
495 Klaw Marvel Comics Male red
496 Jack-Jack Dark Horse Comics Male blue
497 Bolt Marvel Comics Male -
498 Rhino Marvel Comics Male brown
499 Vanisher Marvel Comics Male green
500 Hawk DC Comics Male red
501 Doctor Doom Marvel Comics Male brown
502 Black Bolt Marvel Comics Male blue
503 Spider-Carnage Marvel Comics Male -
504 Billy Kincaid Image Comics <NA> <NA>
505 Triplicate Girl DC Comics Female purple
506 Etrigan DC Comics Male red
507 Jason Bourne Male -
508 Green Goblin Marvel Comics Male blue
509 Captain Midnight Dark Horse Comics Male -
510 Loki Marvel Comics Male green
511 Hydro-Man Marvel Comics Male brown
512 Genesis Marvel Comics Male blue
513 Ozymandias DC Comics Male blue
514 Scarlet Spider Marvel Comics Male blue
515 Robin II DC Comics Male blue
516 Steppenwolf DC Comics Male red
517 She-Thing Marvel Comics Female blue
518 Speedy DC Comics Male -
519 Maverick Marvel Comics Male blue
520 Shadowcat Marvel Comics Female hazel
521 Darkseid DC Comics Male red
522 Buffy Dark Horse Comics Female green
523 Azazel Marvel Comics Male yellow
524 Hal Jordan DC Comics Male brown
525 Yellowjacket Marvel Comics Male blue
526 Annihilus Marvel Comics Male green
527 Green Goblin II Marvel Comics Male blue
528 Venom III Marvel Comics Male brown
529 Atom IV DC Comics Male brown
530 Stargirl DC Comics Female blue
531 Spider-Man Marvel Comics - red
532 Spider-Man Marvel Comics Male brown
533 Spider-Man Marvel Comics Male hazel
534 Goku Shueisha Male -
535 Hellstorm Marvel Comics Male red
536 Crimson Dynamo Marvel Comics Male brown
537 Peter Petrelli NBC - Heroes Male -
538 Booster Gold DC Comics Male blue
539 Razor-Fist II Marvel Comics Male blue
540 Adam Monroe NBC - Heroes <NA> <NA>
541 Venom II Marvel Comics Male brown
542 Magus Marvel Comics Male black
543 Simon Baz DC Comics Male bown
544 Kool-Aid Man <NA> <NA>
545 Jack Bauer Male -
546 Batwoman V DC Comics Female green
547 Elektra Marvel Comics Female blue
548 Mister Knife Marvel Comics Male blue
549 Colossus Marvel Comics Male silver
550 Penguin DC Comics Male blue
551 Dr Manhattan DC Comics Male white
552 Corsair Marvel Comics Male brown
553 Ethan Hunt Male brown
554 Doctor Strange Marvel Comics Male grey
555 Tinkerer Marvel Comics Male brown
556 The Comedian DC Comics Male brown
557 Quantum HarperCollins Male -
558 Evil Deadpool Marvel Comics Male white
559 Mach-IV Marvel Comics Male brown
560 Captain Britain Marvel Comics Male blue
561 Chuck Norris Male -
562 Magog DC Comics Male blue
563 Animal Man DC Comics Male blue
564 Venompool Marvel Comics Male -
565 Master Brood Team Epic TV Male blue
566 Ripcord Marvel Comics Female green
567 Doomsday DC Comics Male red
568 Box Marvel Comics Male -
569 Hybrid Marvel Comics Male brown
570 Bird-Man II Marvel Comics Male -
571 Aquaman DC Comics Male blue
572 Toxin Marvel Comics Male blue
573 Predator Dark Horse Comics <NA> <NA>
574 Nina Theroux SyFy Female -
575 Leader Marvel Comics Male green
576 Mimic Marvel Comics Male brown
577 White Queen Marvel Comics Female blue
578 Blackwing Marvel Comics Male blue
579 Red Hulk Marvel Comics <NA> <NA>
580 Hope Summers Marvel Comics Female green
581 Ammo Marvel Comics Male brown
582 Johann Krauss Dark Horse Comics Male -
583 Blade Marvel Comics Male brown
584 Elastigirl Dark Horse Comics Female brown
585 Blue Beetle DC Comics Male -
586 One Punch Man Shueisha Male -
587 Scarecrow DC Comics <NA> <NA>
588 Birdman Hanna-Barbera Male -
589 Abin Sur DC Comics Male blue
590 Hawkeye II Marvel Comics <NA> <NA>
591 Forge Marvel Comics - brown
592 Beyonder Marvel Comics Male -
593 Deadpool Marvel Comics Male brown
594 Jar Jar Binks George Lucas Male yellow
595 Alfred Pennyworth DC Comics <NA> <NA>
596 Rogue Marvel Comics Female green
597 Hellboy Dark Horse Comics Male gold
598 John Stewart DC Comics Male green
599 Mystique Marvel Comics Female yellow (without irises)
600 Amazo DC Comics Male red
601 Anti-Monitor DC Comics Male yellow
602 Vulcan Marvel Comics Male black
603 Impulse DC Comics Male yellow
604 Godzilla - -
605 Atlas Marvel Comics Male brown
606 Atlas Marvel Comics Male blue
607 Donna Troy DC Comics Female blue
608 Cy-Gor Image Comics Male -
609 Shang-Chi Marvel Comics <NA> <NA>
610 Monarch DC Comics Male blue
611 Solomon Grundy DC Comics Male black
612 Redeemer II Image Comics Male -
613 Cheetah DC Comics <NA> <NA>
614 Stephanie Powell ABC Studios Female -
615 Nathan Petrelli NBC - Heroes Male brown
616 Iron Man Marvel Comics Male blue
617 She-Hulk Marvel Comics Female green
618 Bomb Queen Image Comics Female -
619 Adam Strange DC Comics Male blue
620 Mogo DC Comics Male -
621 Hit-Girl Icon Comics <NA> <NA>
622 Monica Dawson NBC - Heroes Female -
623 Hercules Marvel Comics Male blue
624 Alex Woolsly NBC - Heroes Male -
625 Star-Lord Marvel Comics Male blue
626 Thor Marvel Comics Male blue
627 Scarlet Spider II Marvel Comics <NA> <NA>
628 Professor Zoom DC Comics Male blue
629 Toad Marvel Comics Male black
630 Hela Marvel Comics Female green
631 Blizzard Marvel Comics Male -
632 Blizzard Marvel Comics Male -
633 Silver Surfer Marvel Comics <NA> <NA>
634 Power Man Marvel Comics Male -
635 Faora DC Comics Female -
636 Proto-Goblin Marvel Comics Male green
637 Phoenix Marvel Comics Female green
638 Wonder Man Marvel Comics <NA> <NA>
639 Angel Dark Horse Comics Male -
640 Angel Dark Horse Comics Male blue
641 Metamorpho DC Comics Male black
642 Walrus Marvel Comics Male blue
643 Zoom DC Comics Male red
644 Aqualad DC Comics Male blue
645 Vision Marvel Comics Male gold
646 Brundlefly Male -
647 Robin VI DC Comics Female green
648 Cloak Marvel Comics Male brown
649 Spider-Gwen Marvel Comics Female blue
650 Doctor Octopus Marvel Comics Male brown
651 Luke Skywalker George Lucas Male blue
652 Machine Man Marvel Comics - red
653 Living Brain Marvel Comics - yellow
654 Punisher Marvel Comics Male blue
655 Century Marvel Comics Male white
656 Moonstone Marvel Comics Female blue
657 Psylocke Marvel Comics Female blue
658 Warpath Marvel Comics Male brown
659 Plastique DC Comics Female blue
660 Captain Marvel II DC Comics Male blue
661 Hawkgirl DC Comics Female green
662 Pyro Marvel Comics Male blue
663 Matt Parkman NBC - Heroes Male -
664 Misfit DC Comics Female blue
665 Arsenal DC Comics <NA> <NA>
666 DL Hawkins NBC - Heroes Male -
667 Hawkman DC Comics Male blue
668 X-Man Marvel Comics Male blue
669 Cypher Marvel Comics <NA> <NA>
670 Nova Marvel Comics Male brown
671 Giant-Man II Marvel Comics Male -
672 Kid Flash DC Comics <NA> <NA>
673 Bushido DC Comics Male -
674 Dash Dark Horse Comics Male blue
675 Cannonball Marvel Comics Male blue
676 Blob Marvel Comics Male brown
677 Angela Image Comics Female -
678 Bizarro DC Comics Male black
679 Kyle Rayner DC Comics Male green
680 Green Goblin IV Marvel Comics Male green
681 Hollow Marvel Comics Female blue
682 Cheetah II DC Comics Female green
683 Havok Marvel Comics Male blue
684 Gamora Marvel Comics <NA> <NA>
685 Daphne Powell ABC Studios Female -
686 Batgirl III DC Comics Female -
687 Angel Salvadore Marvel Comics Female brown
688 Elle Bishop NBC - Heroes Female blue
689 Firebird Marvel Comics Female brown
race height weight
1 - 62.5 630
2 <NA> NA NA
3 Human 178.0 77
4 Human 157.0 56
5 Human 178.0 74
6 Kryptonian 180.0 77
7 - NA NA
8 Human 165.0 58
9 Metahuman 170.0 59
10 - 185.0 90
11 Mutant / Clone 155.0 50
12 - 157.0 50
13 - NA NA
14 <NA> NA NA
15 - 188.0 92
16 Human NA NA
17 - NA NA
18 - 170.0 61
19 Human / Radiation 203.0 441
20 <NA> NA NA
21 Human 165.0 56
22 <NA> NA NA
23 Cyborg NA NA
24 <NA> NA NA
25 - 180.0 70
26 Atlantean 175.0 72
27 - NA NA
28 - NA NA
29 Parademon NA NA
30 - 191.0 214
31 Mutant 188.0 86
32 - 191.0 104
33 - 170.0 61
34 - NA NA
35 Mutant 180.0 81
36 - 173.0 57
37 - NA NA
38 Human 188.0 88
39 - 193.0 99
40 - 178.0 58
41 - NA NA
42 - NA NA
43 Human-Vuldarian 188.0 95
44 <NA> NA NA
45 Human 183.0 79
46 Human 178.0 71
47 Human / Radiation 198.0 171
48 - NA NA
49 Human 191.0 104
50 Android 198.0 135
51 Mutant 203.0 158
52 - NA NA
53 Human / Altered 193.0 306
54 - 198.0 180
55 - NA NA
56 Human 180.0 74
57 Rodian 170.0 NA
58 Cyborg 198.0 135
59 Human 180.0 79
60 Animal 122.0 25
61 Human 185.0 80
62 Alien 191.0 106
63 - NA NA
64 - NA NA
65 Mutant 173.0 77
66 - 173.0 52
67 - 170.0 56
68 - 188.0 383
69 - NA NA
70 Mutant NA NA
71 Mutant 175.0 63
72 Human 178.0 79
73 Mutant 198.0 171
74 - 196.0 117
75 - 168.0 101
76 God / Eternal NA NA
77 Human 203.0 180
78 <NA> NA NA
79 Human 180.0 83
80 - NA NA
81 Mutant 196.0 47
82 - 201.0 131
83 - 170.0 65
84 - NA NA
85 - NA NA
86 - 188.0 108
87 <NA> NA NA
88 Human 185.0 91
89 Animal 30.5 NA
90 Asgardian 188.0 191
91 - 163.0 54
92 God / Eternal NA NA
93 - NA NA
94 Mutant 183.0 86
95 Human NA NA
96 - NA NA
97 Inhuman 180.0 59
98 Human 178.0 78
99 - 173.0 61
100 - 178.0 79
101 Mutant NA NA
102 Android 183.0 146
103 <NA> NA NA
104 God / Eternal NA NA
105 Eternal 201.0 443
106 Mutant 183.0 88
107 <NA> NA NA
108 Mutant 183.0 68
109 Human 193.0 97
110 Human 185.0 86
111 Human 165.0 52
112 - NA NA
113 - NA NA
114 - 188.0 113
115 - 173.0 61
116 - NA NA
117 Mutant NA NA
118 <NA> NA NA
119 Human NA NA
120 Human 170.0 59
121 - 198.0 140
122 Yoda's species 66.0 17
123 <NA> NA NA
124 Human / Radiation 185.0 81
125 Human 183.0 99
126 Human-Kree 168.0 52
127 Luphomoid 185.0 83
128 Human 188.0 83
129 - NA NA
130 Cyborg 193.0 178
131 - 163.0 56
132 - 165.0 65
133 Human 178.0 79
134 - 180.0 83
135 Alpha NA NA
136 Alpha NA NA
137 - 165.0 71
138 - 196.0 96
139 <NA> NA NA
140 - NA NA
141 Human 188.0 97
142 Human 211.0 122
143 Human 178.0 81
144 - 178.0 49
145 - NA NA
146 Symbiote 191.0 117
147 Human 180.0 79
148 Mutant NA NA
149 <NA> NA NA
150 <NA> NA NA
151 Flora Colossus 701.0 4
152 Eternal 183.0 207
153 Human 155.0 79
154 Korugaran 201.0 92
155 Human 170.0 59
156 Human 178.0 83
157 - 168.0 54
158 - 366.0 473
159 - 185.0 270
160 - NA NA
161 - 180.0 81
162 Human 175.0 63
163 Human 193.0 101
164 - NA NA
165 Human NA NA
166 Human NA NA
167 Human NA NA
168 Human 191.0 99
169 Demi-God 165.0 51
170 - 178.0 61
171 - NA NA
172 - NA NA
173 Human 170.0 57
174 God / Eternal NA NA
175 Human 198.0 191
176 Human 188.0 95
177 Human 178.0 77
178 - NA NA
179 - 180.0 85
180 - NA NA
181 Human 173.0 54
182 - NA NA
183 Human 203.0 230
184 Alpha NA NA
185 Mutant 188.0 70
186 Human 183.0 81
187 Mutant NA NA
188 Kryptonian 64.0 18
189 - 211.0 191
190 - 213.0 225
191 - NA NA
192 - 175.0 72
193 - 170.0 52
194 Android NA NA
195 Human 188.0 101
196 Human 165.0 52
197 - NA NA
198 - 168.0 52
199 Human 170.0 63
200 Human NA NA
201 Gorilla 198.0 270
202 - NA NA
203 Kryptonian 191.0 101
204 - 188.0 90
205 - NA NA
206 Human 170.0 56
207 Cyborg NA 198
208 Human 180.0 79
209 <NA> NA NA
210 Human 168.0 54
211 - 175.0 50
212 - 175.0 88
213 <NA> NA NA
214 - NA NA
215 Human NA NA
216 Human 211.0 310
217 Cyborg 198.0 173
218 Symbiote 188.0 97
219 Android 213.0 NA
220 Frost Giant 15.2 58
221 <NA> NA NA
222 - 170.0 62
223 Dathomirian Zabrak 170.0 NA
224 - 196.0 248
225 Human 188.0 92
226 - NA NA
227 Atlantean 188.0 125
228 Demon 188.0 99
229 - 180.0 72
230 Bolovaxian 234.0 324
231 God / Eternal 206.0 293
232 - NA NA
233 Human 188.0 108
234 - 196.0 104
235 - 168.0 54
236 Human-Vulcan 185.0 81
237 Human 170.0 57
238 Human 175.0 61
239 Human NA NA
240 God / Eternal NA NA
241 - 165.0 54
242 Human 188.0 113
243 <NA> NA NA
244 - NA NA
245 Human 137.0 41
246 Human 185.0 95
247 Human 185.0 99
248 - NA NA
249 - NA NA
250 - 168.0 68
251 - 218.0 158
252 - NA NA
253 - NA NA
254 Cosmic Entity 876.0 16
255 Mutant 191.0 88
256 - 180.0 54
257 Human 183.0 99
258 Human / Radiation 168.0 54
259 Mutant 173.0 52
260 Human / Altered 196.0 128
261 - NA NA
262 - 198.0 288
263 - NA NA
264 Atlantean 188.0 125
265 <NA> NA NA
266 Animal NA NA
267 Human 165.0 54
268 - NA NA
269 God / Eternal NA NA
270 <NA> NA NA
271 Mutant 173.0 65
272 - 30.5 NA
273 Human 185.0 81
274 - NA NA
275 Human 165.0 56
276 - 185.0 101
277 - 188.0 108
278 Alien NA NA
279 Human 178.0 54
280 - 165.0 49
281 Human 173.0 72
282 Human 165.0 58
283 Metahuman 170.0 59
284 Mutant 183.0 101
285 God / Eternal 198.0 126
286 Human 168.0 57
287 <NA> NA NA
288 Talokite 173.0 54
289 - NA NA
290 Human 188.0 91
291 Mutant 170.0 59
292 Human 297.0 NA
293 Human 175.0 54
294 Cyborg NA 176
295 Alien 193.0 98
296 - 168.0 52
297 - NA NA
298 - NA 2
299 Human 287.0 855
300 <NA> NA NA
301 Mutant NA NA
302 Human 191.0 104
303 - 180.0 74
304 - 175.0 77
305 - 211.0 104
306 Maiar 279.0 NA
307 - NA NA
308 Human NA NA
309 - NA NA
310 Cosmic Entity NA NA
311 Human 175.0 79
312 Mutant 183.0 87
313 <NA> NA NA
314 <NA> NA NA
315 - NA NA
316 Human 188.0 NA
317 - NA NA
318 - 185.0 80
319 <NA> NA NA
320 Human 196.0 86
321 - 180.0 167
322 Human 173.0 68
323 Cyborg NA NA
324 Human 188.0 89
325 Human 170.0 54
326 - NA NA
327 <NA> NA NA
328 - 183.0 86
329 - 180.0 90
330 Human 175.0 63
331 - 191.0 88
332 Human 170.0 57
333 - NA NA
334 Human 183.0 86
335 - 155.0 65
336 - 180.0 59
337 - 191.0 113
338 - NA NA
339 <NA> NA NA
340 Mutant 142.0 45
341 Human / Radiation 178.0 77
342 <NA> NA NA
343 - 168.0 54
344 - 185.0 85
345 <NA> NA NA
346 Human 183.0 81
347 Human 183.0 NA
348 Human 178.0 77
349 Human 157.0 56
350 Human 178.0 74
351 Human 188.0 95
352 Martian 201.0 135
353 - 175.0 56
354 Human 183.0 170
355 <NA> NA NA
356 Amazon 183.0 74
357 Android 196.0 90
358 Cyborg NA 149
359 Mutant 185.0 81
360 Kakarantharaian 975.0 18
361 Atlantean 175.0 72
362 Mutant NA NA
363 - NA NA
364 <NA> NA NA
365 Cosmic Entity NA NA
366 Inhuman 168.0 50
367 - 79.0 18
368 Mutant 173.0 56
369 Human 165.0 54
370 - NA NA
371 Human 183.0 86
372 - NA NA
373 Human 137.0 38
374 <NA> NA NA
375 Human NA NA
376 - NA NA
377 Czarnian 229.0 288
378 Cyborg 175.0 58
379 <NA> NA NA
380 Human NA NA
381 Symbiote 229.0 358
382 <NA> NA NA
383 - NA NA
384 - 178.0 68
385 - NA NA
386 Human / Altered 213.0 NA
387 - NA NA
388 Human 163.0 50
389 Human NA NA
390 - NA NA
391 - 191.0 135
392 Mutant 188.0 87
393 Human / Clone 183.0 NA
394 Human / Radiation 244.0 630
395 Human 173.0 61
396 Human 183.0 106
397 Cyborg 366.0 338
398 Mutant 213.0 135
399 - NA NA
400 - 183.0 77
401 - 188.0 95
402 - 168.0 61
403 Metahuman 244.0 356
404 Inhuman 188.0 86
405 Human NA NA
406 - 191.0 104
407 Human 188.0 108
408 Human 201.0 158
409 - NA NA
410 - NA NA
411 Mutant 170.0 52
412 Human NA NA
413 - NA NA
414 - 178.0 81
415 Human 168.0 50
416 - 178.0 115
417 Tamaranean 193.0 71
418 Mutant 165.0 52
419 - NA NA
420 - 188.0 79
421 Human 178.0 59
422 Human 193.0 101
423 Human-Kree 180.0 74
424 Saiyan 168.0 73
425 Human 218.0 495
426 - NA NA
427 - NA NA
428 Human 168.0 63
429 Human 175.0 61
430 - 165.0 52
431 Mutant 170.0 63
432 - NA NA
433 - 173.0 55
434 Human 183.0 90
435 Strontian 198.0 268
436 Vampire NA NA
437 - 183.0 68
438 Human 180.0 81
439 <NA> NA NA
440 Mutant 305.0 405
441 - 178.0 65
442 - NA NA
443 - 178.0 68
444 - NA NA
445 - 183.0 89
446 - 163.0 50
447 <NA> NA NA
448 God / Eternal NA NA
449 Human 183.0 90
450 <NA> NA NA
451 <NA> NA NA
452 - 201.0 132
453 - 175.0 74
454 Mutant 165.0 57
455 <NA> NA NA
456 Human / Radiation 193.0 90
457 - NA NA
458 - 170.0 68
459 <NA> NA NA
460 <NA> NA NA
461 God / Eternal NA NA
462 Mutant 180.0 181
463 Mutant 160.0 135
464 Mutant 183.0 67
465 - NA NA
466 - 175.0 54
467 - 180.0 83
468 Human NA NA
469 Mutant 183.0 79
470 Kryptonian NA NA
471 - 180.0 54
472 Human 180.0 81
473 Human 185.0 203
474 Mutant 168.0 56
475 - NA NA
476 - NA NA
477 Human NA NA
478 Human NA NA
479 Kryptonian 165.0 54
480 God / Eternal NA NA
481 <NA> NA NA
482 Human NA NA
483 - 140.0 39
484 - 183.0 88
485 Human NA NA
486 Human 193.0 101
487 Human-Kree 180.0 74
488 Human NA NA
489 - NA NA
490 - NA NA
491 Human 165.0 50
492 - NA NA
493 Human NA NA
494 Symbiote 185.0 86
495 Human 188.0 97
496 Human 71.0 14
497 - NA NA
498 Human / Radiation 196.0 320
499 - 165.0 79
500 - 185.0 89
501 Human 201.0 187
502 Inhuman 188.0 95
503 Symbiote NA NA
504 <NA> NA NA
505 - 168.0 59
506 Demon 193.0 203
507 Human NA NA
508 Human 180.0 83
509 Human NA NA
510 Asgardian 193.0 236
511 - 188.0 119
512 - 185.0 86
513 Human NA NA
514 Human 178.0 74
515 Human 183.0 101
516 New God 183.0 91
517 Human / Radiation 183.0 153
518 Human NA NA
519 - 193.0 110
520 Mutant 168.0 50
521 New God 267.0 817
522 Human 157.0 52
523 Neyaphem 183.0 67
524 Human 188.0 90
525 Human 183.0 83
526 - 180.0 90
527 - 178.0 77
528 Symbiote 229.0 334
529 - NA 72
530 Human 165.0 62
531 Human 178.0 77
532 Human 157.0 56
533 Human 178.0 74
534 Saiyan 175.0 62
535 - 185.0 81
536 - 180.0 104
537 - NA NA
538 Human 196.0 97
539 - 191.0 117
540 <NA> NA NA
541 - 175.0 50
542 - 183.0 NA
543 Human NA NA
544 <NA> NA NA
545 - NA NA
546 Human 178.0 NA
547 Human 175.0 59
548 Spartoi NA NA
549 Mutant 226.0 225
550 Human 157.0 79
551 Human / Cosmic NA NA
552 - 191.0 79
553 Human 168.0 NA
554 Human 188.0 81
555 - 163.0 54
556 Human 188.0 101
557 - NA NA
558 Mutant 188.0 95
559 - 180.0 79
560 Human 198.0 116
561 - 178.0 NA
562 - NA NA
563 Human 183.0 83
564 Symbiote 226.0 NA
565 - 183.0 81
566 - 180.0 72
567 Alien 244.0 412
568 - NA NA
569 Symbiote 175.0 77
570 Human NA NA
571 Atlantean 185.0 146
572 Symbiote 188.0 97
573 <NA> NA NA
574 Alpha NA NA
575 - 178.0 63
576 - 188.0 101
577 - 178.0 65
578 - 185.0 86
579 <NA> NA NA
580 - 168.0 48
581 Human 188.0 101
582 - NA NA
583 Vampire 188.0 97
584 Human 168.0 56
585 - NA NA
586 Human 175.0 69
587 <NA> NA NA
588 God / Eternal NA NA
589 Ungaran 185.0 90
590 <NA> NA NA
591 - 183.0 81
592 God / Eternal NA NA
593 Mutant 188.0 95
594 Gungan 193.0 NA
595 <NA> NA NA
596 - 173.0 54
597 Demon 259.0 158
598 Human 185.0 90
599 Mutant 178.0 54
600 Android 257.0 173
601 God / Eternal 61.0 NA
602 - NA NA
603 Human 170.0 65
604 Kaiju 108.0 NA
605 Mutant 183.0 101
606 God / Eternal 198.0 126
607 Amazon 175.0 63
608 - NA NA
609 <NA> NA NA
610 - 193.0 90
611 Zombie 279.0 437
612 - NA NA
613 <NA> NA NA
614 - NA NA
615 - NA NA
616 Human 198.0 191
617 Human 201.0 315
618 - NA NA
619 Human 185.0 88
620 Planet NA NA
621 <NA> NA NA
622 - NA NA
623 Demi-God 196.0 146
624 - NA NA
625 Human-Spartoi 188.0 79
626 Asgardian 198.0 288
627 <NA> NA NA
628 Human 180.0 81
629 Mutant 175.0 76
630 Asgardian 213.0 225
631 - NA NA
632 - NA NA
633 <NA> NA NA
634 Mutant NA NA
635 Kryptonian NA NA
636 - NA NA
637 Mutant 168.0 52
638 <NA> NA NA
639 Vampire NA NA
640 - 183.0 68
641 - 185.0 90
642 Human 183.0 162
643 - 185.0 81
644 Atlantean 178.0 106
645 Android 191.0 135
646 Mutant 193.0 NA
647 Human NA NA
648 - 226.0 70
649 Human 165.0 56
650 Human 175.0 110
651 Human 168.0 77
652 - 183.0 383
653 - 198.0 360
654 Human 183.0 90
655 Alien 201.0 97
656 - 180.0 59
657 Mutant 180.0 70
658 Mutant 218.0 158
659 - 168.0 55
660 Human 175.0 74
661 - 175.0 61
662 - 178.0 68
663 - NA NA
664 - NA NA
665 <NA> NA NA
666 - NA NA
667 - 185.0 88
668 - 175.0 61
669 <NA> NA NA
670 Human 185.0 86
671 - NA NA
672 <NA> NA NA
673 Human NA NA
674 Human 122.0 27
675 - 183.0 81
676 - 178.0 230
677 - NA NA
678 Bizarro 191.0 155
679 Human 180.0 79
680 - 178.0 79
681 - 170.0 NA
682 Human 170.0 55
683 Mutant 183.0 79
684 <NA> NA NA
685 - NA NA
686 - NA NA
687 - 163.0 54
688 - NA NA
689 - 165.0 56
Count the rows:
left_join(heroes_meta, heroes_personal) %>% count() n
1 689
left_join(heroes_personal, heroes_meta) %>% count() n
1 691
We get slightly different numbers depending on which order we join the data in.
This is because left_join only keeps rows in the right
hand dataset IF they have a match in the left hand side. If the number
of rows in the left and right hand sides differ, you can get a different
result.
Other functions like inner_join and
full_join take different approaches. Type
?dplyr::inner_join for an explanation.
This code would export a csv file to the same location as your
rmd file:
left_join(heroes_meta, heroes_personal) %>% rio::export('combined.csv')